🔷 При решении ноутбука используйте данный шаблон
✅ Можно добавлять новые ячейки любых типов
❌ Не нужно удалять текстовые ячейки c разметкой частей ноутбука и формулировками заданий
🔷 При оценивании задач учитывается код
✅ Задания, в которых необходим код, обычно помечаются фразами "Your code here"/"Ваш код" и аналогичными
❌ Ответы на вопросы без сопутствующего кода оцениваются в 0 баллов
❌ Наличе работоспособного кода в ноутбуке, если на сказано иного, обязательно
🔷 При оценивании задач учитываются выводы
✅ Задания, в которых необходимы выводы, обычно помечаются фразами Вывод"/"Ответ на вопрос"/"Ваш текст" и аналогичными
✅ Обычно выводы подразумевают под собой текстовый ответ (можно писать markdown, latex).
✅ Сопутствующие изображения, графики, таблички - приветствуются!
❌ При отсутствии выводов задание не засчитается на полный балл
В этом задании вы..:
**Примерное время выполнения (execution time/время выполнения, если нажать run all) всех ячеек ноутбука при правильной реализации: 30 минут **
Перед началом выполнения переведите ноутбук в Доверенный режим (Trusted) для корректного отображения изображений:
%config Completer.use_jedi = False
%load_ext autoreload
%autoreload 2
Сначала установим нужные нам версии библиотек. Мы гарантируем, что в данных версиях задание будет корректно отрабатывать.
После установки нужных версий, возможно, нужно перезагрузить среду (runtime), но скорее всего вам это не понадобится
На скачивание файла и установку понадобится не более 5 минут.
**Важно!**
Устанавливать нужные версии нужно каждый раз, когда создается новый рантайм. Например, если вы 2 часа подряд делаете это задание, то подготовить библиотеки достаточно 1 раз. Но если вы, например, начали в понедельник, затем закрыли/выключили ноутбук, то при продолжении в среду, вам нужно будет запустить рантайм заново и следовательно заново установить библиотеки.
**Важно!** Если вы предпочитаете делать практические задания на своем личном ноутбуке, то проверьте, что вы установили рабочее окружение в соответствии с гайдом.pdf)
**Важно!** В этом задании мы будем использовать полное виртуальное окружение, так как понадобятся библиотеки torch и tensorflow
Обратите внимание, что установка torch и tensorflow через pipможет сломать ваше окружение, особенно если вы используете GPU. Выполняйте их установку в соответствии с Вашей конфигурацией системы или в отдельном виртуальном окружении
# !!! Данный блок будет работать только в Google-Colab !!!
! gdown 19ZRLAdlNBI5OScrbxXzO3iaWJSkJlXeA
! pip install -r /content/requirements_2024_25_for_colab_full.txt
Downloading... From: https://drive.google.com/uc?id=19ZRLAdlNBI5OScrbxXzO3iaWJSkJlXeA To: /content/requirements_2024_25_for_colab_full.txt 100% 424/424 [00:00<00:00, 1.27MB/s] Requirement already satisfied: catboost==1.2.7 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 1)) (1.2.7) Requirement already satisfied: gdown==5.1.0 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 2)) (5.1.0) Requirement already satisfied: h5py==3.11.0 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 3)) (3.11.0) Requirement already satisfied: hyperopt==0.2.7 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 4)) (0.2.7) Requirement already satisfied: ipympl==0.9.4 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.9.4) Requirement already satisfied: ipywidgets==7.7.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 6)) (7.7.1) Requirement already satisfied: keras==3.4.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 7)) (3.4.1) Requirement already satisfied: lightgbm==4.4.0 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 8)) (4.4.0) Requirement already satisfied: matplotlib==3.7.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 9)) (3.7.1) Requirement already satisfied: matplotlib-inline==0.1.7 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 10)) (0.1.7) Requirement already satisfied: numpy==1.26.4 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 11)) (1.26.4) Requirement already satisfied: pandas==2.1.4 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 12)) (2.1.4) Requirement already satisfied: pep8==1.7.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 13)) (1.7.1) Requirement already satisfied: plotly==5.15.0 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 14)) (5.15.0) Requirement already satisfied: pycodestyle==2.12.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 15)) (2.12.1) Requirement already satisfied: pytest==7.4.4 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 16)) (7.4.4) Requirement already satisfied: scikit-image==0.23.2 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 17)) (0.23.2) Requirement already satisfied: scikit-learn==1.3.2 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 18)) (1.3.2) Requirement already satisfied: scipy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 19)) (1.13.1) Requirement already satisfied: seaborn==0.13.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 20)) (0.13.1) Requirement already satisfied: torch==2.3.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 21)) (2.3.1) Requirement already satisfied: torchvision==0.18.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 22)) (0.18.1) Requirement already satisfied: tqdm==4.66.5 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 23)) (4.66.5) Requirement already satisfied: umap-learn==0.5.6 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 24)) (0.5.6) Requirement already satisfied: xgboost==2.1.1 in /usr/local/lib/python3.11/dist-packages (from -r /content/requirements_2024_25_for_colab_full.txt (line 25)) (2.1.1) Requirement already satisfied: graphviz in /usr/local/lib/python3.11/dist-packages (from catboost==1.2.7->-r /content/requirements_2024_25_for_colab_full.txt (line 1)) (0.20.3) Requirement already satisfied: six in /usr/local/lib/python3.11/dist-packages (from catboost==1.2.7->-r /content/requirements_2024_25_for_colab_full.txt (line 1)) (1.17.0) Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.11/dist-packages (from gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (4.13.4) Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (3.18.0) Requirement already satisfied: requests[socks] in /usr/local/lib/python3.11/dist-packages (from gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (2.32.3) Requirement already satisfied: networkx>=2.2 in /usr/local/lib/python3.11/dist-packages (from hyperopt==0.2.7->-r /content/requirements_2024_25_for_colab_full.txt (line 4)) (3.4.2) Requirement already satisfied: future in /usr/local/lib/python3.11/dist-packages (from hyperopt==0.2.7->-r /content/requirements_2024_25_for_colab_full.txt (line 4)) (1.0.0) Requirement already satisfied: cloudpickle in /usr/local/lib/python3.11/dist-packages (from hyperopt==0.2.7->-r /content/requirements_2024_25_for_colab_full.txt (line 4)) (3.1.1) Requirement already satisfied: py4j in /usr/local/lib/python3.11/dist-packages (from hyperopt==0.2.7->-r /content/requirements_2024_25_for_colab_full.txt (line 4)) (0.10.9.7) Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.11/dist-packages (from ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.2.0) Requirement already satisfied: ipython<9 in /usr/local/lib/python3.11/dist-packages (from ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (7.34.0) Requirement already satisfied: pillow in /usr/local/lib/python3.11/dist-packages (from ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (11.1.0) Requirement already satisfied: traitlets<6 in /usr/local/lib/python3.11/dist-packages (from ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (5.7.1) Requirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (6.17.1) Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (3.6.10) Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (3.0.14) Requirement already satisfied: absl-py in /usr/local/lib/python3.11/dist-packages (from keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (1.4.0) Requirement already satisfied: rich in /usr/local/lib/python3.11/dist-packages (from keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (13.9.4) Requirement already satisfied: namex in /usr/local/lib/python3.11/dist-packages (from keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (0.0.9) Requirement already satisfied: optree in /usr/local/lib/python3.11/dist-packages (from keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (0.15.0) Requirement already satisfied: ml-dtypes in /usr/local/lib/python3.11/dist-packages (from keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (0.4.1) Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (24.2) Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib==3.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 9)) (1.3.2) Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib==3.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 9)) (0.12.1) Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib==3.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 9)) (4.57.0) Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib==3.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 9)) (1.4.8) Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib==3.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 9)) (3.2.3) Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.11/dist-packages (from matplotlib==3.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 9)) (2.8.2) Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas==2.1.4->-r /content/requirements_2024_25_for_colab_full.txt (line 12)) (2025.2) Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.11/dist-packages (from pandas==2.1.4->-r /content/requirements_2024_25_for_colab_full.txt (line 12)) (2025.2) Requirement already satisfied: tenacity>=6.2.0 in /usr/local/lib/python3.11/dist-packages (from plotly==5.15.0->-r /content/requirements_2024_25_for_colab_full.txt (line 14)) (9.1.2) Requirement already satisfied: iniconfig in /usr/local/lib/python3.11/dist-packages (from pytest==7.4.4->-r /content/requirements_2024_25_for_colab_full.txt (line 16)) (2.1.0) Requirement already satisfied: pluggy<2.0,>=0.12 in /usr/local/lib/python3.11/dist-packages (from pytest==7.4.4->-r /content/requirements_2024_25_for_colab_full.txt (line 16)) (1.5.0) Requirement already satisfied: imageio>=2.33 in /usr/local/lib/python3.11/dist-packages (from scikit-image==0.23.2->-r /content/requirements_2024_25_for_colab_full.txt (line 17)) (2.37.0) Requirement already satisfied: tifffile>=2022.8.12 in /usr/local/lib/python3.11/dist-packages (from scikit-image==0.23.2->-r /content/requirements_2024_25_for_colab_full.txt (line 17)) (2025.3.30) Requirement already satisfied: lazy-loader>=0.4 in /usr/local/lib/python3.11/dist-packages (from scikit-image==0.23.2->-r /content/requirements_2024_25_for_colab_full.txt (line 17)) (0.4) Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from scikit-learn==1.3.2->-r /content/requirements_2024_25_for_colab_full.txt (line 18)) (1.4.2) Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn==1.3.2->-r /content/requirements_2024_25_for_colab_full.txt (line 18)) (3.6.0) Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (4.13.2) Requirement already satisfied: sympy in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (1.13.1) Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (3.1.6) Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (2025.3.2) Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (12.1.105) Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (12.1.105) Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (12.1.105) Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (8.9.2.26) Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (12.1.3.1) Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (11.0.2.54) Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (10.3.2.106) Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (11.4.5.107) Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (12.1.0.106) Requirement already satisfied: nvidia-nccl-cu12==2.20.5 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (2.20.5) Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (12.1.105) Requirement already satisfied: triton==2.3.1 in /usr/local/lib/python3.11/dist-packages (from torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (2.3.1) Requirement already satisfied: numba>=0.51.2 in /usr/local/lib/python3.11/dist-packages (from umap-learn==0.5.6->-r /content/requirements_2024_25_for_colab_full.txt (line 24)) (0.60.0) Requirement already satisfied: pynndescent>=0.5 in /usr/local/lib/python3.11/dist-packages (from umap-learn==0.5.6->-r /content/requirements_2024_25_for_colab_full.txt (line 24)) (0.5.13) Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.11/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (12.5.82) Requirement already satisfied: debugpy>=1.0 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.8.0) Requirement already satisfied: jupyter-client>=6.1.12 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (6.1.12) Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.6.0) Requirement already satisfied: psutil in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (5.9.5) Requirement already satisfied: pyzmq>=17 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (24.0.1) Requirement already satisfied: tornado>=6.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (6.4.2) Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (75.2.0) Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.19.2) Requirement already satisfied: decorator in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (4.4.2) Requirement already satisfied: pickleshare in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.7.5) Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (3.0.51) Requirement already satisfied: pygments in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (2.18.0) Requirement already satisfied: backcall in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.2.0) Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.11/dist-packages (from ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (4.9.0) Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /usr/local/lib/python3.11/dist-packages (from numba>=0.51.2->umap-learn==0.5.6->-r /content/requirements_2024_25_for_colab_full.txt (line 24)) (0.43.0) Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.11/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (6.5.7) Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (2.7) Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (3.0.2) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (3.4.1) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (3.10) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (2.3.0) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (2025.1.31) Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown==5.1.0->-r /content/requirements_2024_25_for_colab_full.txt (line 2)) (1.7.1) Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich->keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (3.0.0) Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy->torch==2.3.1->-r /content/requirements_2024_25_for_colab_full.txt (line 21)) (1.3.0) Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.11/dist-packages (from jedi>=0.16->ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.8.4) Requirement already satisfied: jupyter-core>=4.6.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (5.7.2) Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich->keras==3.4.1->-r /content/requirements_2024_25_for_colab_full.txt (line 7)) (0.1.2) Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (23.1.0) Requirement already satisfied: nbformat in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (5.10.4) Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (7.16.6) Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.8.3) Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.18.1) Requirement already satisfied: prometheus-client in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.21.1) Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.2.0) Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.11/dist-packages (from pexpect>4.3->ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.7.0) Requirement already satisfied: wcwidth in /usr/local/lib/python3.11/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython<9->ipympl==0.9.4->-r /content/requirements_2024_25_for_colab_full.txt (line 5)) (0.2.13) Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.11/dist-packages (from jupyter-core>=4.6.0->jupyter-client>=6.1.12->ipykernel>=4.5.1->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (4.3.7) Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.11/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.2.4) Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (6.2.0) Requirement already satisfied: defusedxml in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.7.1) Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.3.0) Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (3.1.3) Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.10.2) Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.5.1) Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (2.21.1) Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (4.23.0) Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.11/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (21.2.0) Requirement already satisfied: webencodings in /usr/local/lib/python3.11/dist-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.5.1) Requirement already satisfied: tinycss2<1.5,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.4.0) Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (25.3.0) Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (2024.10.1) Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.36.2) Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (0.24.0) Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.11/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.16.0) Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.17.1) Requirement already satisfied: pycparser in /usr/local/lib/python3.11/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (2.22) Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (4.9.0) Requirement already satisfied: websocket-client in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.8.0) Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets==7.7.1->-r /content/requirements_2024_25_for_colab_full.txt (line 6)) (1.3.1)
import catboost
assert(catboost.__version__ == '1.2.7')
Теперь можно приступать к выполнению задания! :)
В данной работе вам предстоит познакомится с методами машинного обучения без учителя — кластеризацией и алгоритмами снижения размерности.
Рекомендуется использовать Kaggle так как в нём корректно работают интерактивные визуализации.
Здесь перечислены основные функции и библиотеки, которые могут понадобиться Вам в процессе выполнения задания. Подключение других библиотек возможно, но нежелательно. Работа каких-либо других библиотек не гарантируется.
import os
import gdown
import scipy
import numpy as np
import tqdm.auto as tqdm
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
from ipywidgets import interactive, fixed, interact_manual, IntSlider, FloatLogSlider, FloatSlider
import torch
from torchvision.datasets import CIFAR10
# Необходима преварительная установка tensorflow
from keras.applications.inception_v3 import InceptionV3, preprocess_input
import sklearn
from sklearn.decomposition import KernelPCA
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
# Библиотека umap-learn, а не umap
from umap import UMAP
from sklearn.manifold import TSNE, Isomap
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification, make_moons, make_blobs
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from warnings import simplefilter
from sklearn.exceptions import ConvergenceWarning
simplefilter("ignore", category=ConvergenceWarning)
from sklearn.preprocessing import MinMaxScaler
!pip install ipywidgets
from ipywidgets import interact, fixed
Информация об особенностях интерактивных графиков вынесена в отдельный ноутбук Deep dive into .ipynb.ipynb. Ознакомьтесь с ним перед дальнейшим выполнением задания!
interactive, interact_manual, fixed, IntSlider, FloatLogSlider.IntSlider()
IntSlider(value=0)
def f(a, b):
display((a + b)**2)
return a+b
w = interactive(f, a=5, b=6)
display(w)
interactive(children=(IntSlider(value=5, description='a', max=15, min=-5), IntSlider(value=6, description='b',…
def h(p, q):
return p * q
interact(h, p=5, q=fixed(6));
interactive(children=(IntSlider(value=5, description='p', max=15, min=-5), Output()), _dom_classes=('widget-in…
def slow_function(i):
print(int(i),list(x for x in range(int(i)) if
str(x)==str(x)[::-1] and
str(x**2)==str(x**2)[::-1]))
return
interact_manual(slow_function,i=FloatSlider(min=1e5, max=1e7, step=1e5));
interactive(children=(FloatSlider(value=100000.0, description='i', max=10000000.0, min=100000.0, step=100000.0…
**Ваш ответ здесь:** Крайне удобный инструмент
Обратите внимание, что динамическое содержимое может некорректно сохраняться в jupyter notebook. Используйте его только для локальной визуализации. Все графики, необходимые для сдачи задания должны быть статическими. Переход в статический режим происходит с помощью магической команды %matplotlib inline.
Обязательно убедитесь, что все графики корректно сохранились корректно в ноутбуке перед сдачей в систему.
%matplotlib inline
matplotlib.rcParams['figure.dpi'] = 300
При выполнении задания запрещено:
При оформлении задания обратите внимание на форматирование кода и на оформление графиков:
Графики должны быть с одной стороны понятными и информативными, а с другой стороны красивыми. Вот несколько пунктов, которые помогут удовлетворить этим требования:
matplotlib_inline.backend_inline.set_matplotlib_formats('pdf', 'svg'). Если изображения в векторном формате приводят к слишком большому размеру Jupyter Notebook можете использовать растровые изображения с высоким dpi. Напирмер, можно установить глобальный dpi в matplotlib: matplotlib.rcParams['figure.dpi'] = 300title)log, symlog по необходимости[xy]ticks, [xy]ticklabels вручную. Подписи тиков на осях не должны сливаться как на одной оси, так и между нимиplt.style.use('seaborn-colorblind')
# Или
plt.style.use('tableau-colorblind10')
# Затем, при отрисовке графиков не используйте параметр cmap
В данной части мы рассмотрим несколько наборов синтетических данных и сравним как разные алгоритмы кластеризации ведут себя в низкоразмерных и высокоразмерных пространствах
Сгенерируем двумерные данные с естественными кластерами разного размера и плотности.
data_moons, labels_moons = make_moons(n_samples=300, shuffle=True, noise=0.09, random_state=6417)
data_moons, labels_moons = data_moons[labels_moons == 0], labels_moons[labels_moons == 0]
data_blobs, labels_blobs = make_blobs(
n_samples=500, n_features=2, centers=[(0, -0.2), (-1.5, -1.5), (-1.5, 1.5)],
cluster_std=[0.2, 0.4, 0.6], center_box=(-10.0, 10.0),
shuffle=True, random_state=6417, return_centers=False
)
data = np.concatenate([data_moons, data_blobs])
labels = np.concatenate([labels_moons, labels_blobs + 1])
Определим вспомогательную функцию для отрисовки двумерных кластеризованных данных. При выполенении задания желательно пользоваться этой функцией для визуализации. При необходимости можете менять сигнатуру и поведение функции как вам удобно, оставляя стиль отрисовки в целом неизменным.
def plot_2d_data(data, labels, title='Исходные данные', cmap='tab20', ax=None):
'''
Отрисовка 2d scatter plot.
:param np.ndarray data: 2d массив точек
:param Union[list, np.ndarray] labels: список меток для каждой точки выборки
:param str title: Заголовок графика
:param str cmap: Цветовая палитра
:param ax Optional[matplotlib.axes.Axes]: Оси для отрисовки графика.
Если оси не заданы, то создаётся новая фигура и сразу же происходит её отрисовка
Иначе, график добавляется на существуюущие оси. Отрисовки фигуры не происходит
'''
n_clusters = len(np.unique(labels))
if ax is None:
fig, ax = plt.subplots(1, 1, figsize=(10, 5))
else:
fig = None
scatter = ax.scatter(
data[:, 0], data[:, 1], c=labels,
cmap=plt.get_cmap(cmap, n_clusters)
)
cbar = plt.colorbar(scatter, label='Номер кластера', ax=ax)
cbar.set_ticks(np.min(labels) + (np.arange(n_clusters) + 0.5) * (n_clusters - 1) / n_clusters)
cbar.set_ticklabels(np.unique(labels))
ax.set_title(title)
ax.grid(True)
if fig is not None:
fig.tight_layout()
plt.show()
plot_2d_data(data, labels, title='Исходные данные', cmap='tab20')
Запустите следующие алгоритмы кластеризации на данной выборке: KMeans, DBSCAN, AgglomerativeClustering. Визуально подберите наилучшие параметры для этих алгоритмов (n_clusters, eps, min_samples, linkage). Изобразите наилучшие получившиеся разбиения на графиках.
**Советы**
plot_2d_data для отрисовки графиков. Обязательно меняйте заголовокkmeans = KMeans(n_clusters=4, random_state=0, n_init="auto").fit(data)
plot_2d_data(data, kmeans.labels_, title='Кластеризация с помощью KMeans', cmap='tab20')
def f(eps, min_samples):
clustering = DBSCAN(eps=eps, min_samples=min_samples).fit(data)
plot_2d_data(data, clustering.labels_, title='Кластеризация с помощью DBSCAN', cmap='tab20')
interactive_plot = interactive(
f,
min_samples=IntSlider(value=1, min=1, max=20, step=1, description='min_samples'),
eps=FloatSlider(value=0.01, min=0.001, max=1, step=0.001, description="eps")
)
interactive_plot
interactive(children=(FloatSlider(value=0.01, description='eps', max=1.0, min=0.001, step=0.001), IntSlider(va…
clustering = DBSCAN(eps=0.3, min_samples=5).fit(data)
plot_2d_data(data, clustering.labels_, title='Кластеризация с помощью DBSCAN', cmap='tab20')
from ipywidgets import widgets
def f(linkage):
clustering = AgglomerativeClustering(n_clusters=4, linkage=linkage).fit(data)
plot_2d_data(data, clustering.labels_, title='Кластеризация с помощью AgglomerativeClustering', cmap='tab20')
interactive_plot = interactive(
f,
linkage=widgets.Select(options=["ward", "complete", "average", "single"], value='ward', description='linkage', disabled=False)
)
interactive_plot
interactive(children=(Select(description='linkage', options=('ward', 'complete', 'average', 'single'), value='…
clustering = AgglomerativeClustering(n_clusters=4, linkage="ward").fit(data)
plot_2d_data(data, clustering.labels_, title='Кластеризация с помощью AgglomerativeClustering', cmap='tab20')
Основываясь на знании о работе данных алгоритмов, объясните, почему кластеры были сформированы таким образом. Какой алгоритм лучше всего работает на предложенных данных?
**Ваш ответ здесь:** DBSCAN
Теперь попробуем кластеризовать данные в высокоразмерном пространстве. Существенным отличием от двумерного случая является невозможность прямой визуальной оценки кластеризации.
Одним из наглядных способов оценки кластеризации является снижение размерности. В данной части вам предлагается использовать алгоритм TSNE для визуализации данных.
**t-SNE (t-распределенное стохастическое вложение соседей)** — это алгоритм используемый для сокращения размерности данных, а также для визуализации многомерных данных в 2D или 3D, сохраняя их «структуру». Он фокусируется на том, чтобы близкие точки в исходном пространстве оставались близкими в новом, а далёкие — не обязательно. Для этого t-SNE моделирует сходство между точками в высоком измерении (через условные вероятности) и в низком (через распределение Стьюдента), затем итеративно подгоняет проекции, минимизируя разницу между этими сходствами. В итоге кластеры или локальные паттерны становятся видимыми, но абсолютные расстояния и глобальная структура могут искажаться. Алгоритм полезен для исследования данных, но требует осторожности в интерпретации.
data, labels = make_classification(
n_samples=1000, n_features=200, n_informative=100,
n_repeated=0, n_classes=5, n_clusters_per_class=2, weights=None,
flip_y=0.01, class_sep=2.5, hypercube=True, shift=0.0, scale=1.0,
shuffle=True, random_state=6417
)
Примените алгоритм TSNE для снижения размерности до двух. Учтите, что TSNE суть есть метрический алгоритм и существенно зависит от масштаба признаков — некорректный и различающийся масштаб признаков гарантированно приведёт к неинтерпретируемым результатам. Можете попробовать подобрать гиперпараметры алгоритма для получения лучшей визуализации.
Изобразите получившиеся низкоразмерные вектора. Получилось ли сохранить кластеры при переходе в низкоразмерное пространство?
data = MinMaxScaler().fit_transform(data)
def f(perplexity, angle):
X_embedded = TSNE(n_components=2, perplexity=perplexity, n_iter=1000, angle=angle).fit_transform(data)
plot_2d_data(X_embedded, labels, title='Результат применения TSNE', cmap='tab20')
interactive_plot = interactive(
f,
perplexity=IntSlider(value=1, min=1, max=100, step=1, description='perplexity'),
angle=FloatSlider(value=0.2, min=0.2, max=1, step=0.001, description="angle")
)
interactive_plot
interactive(children=(IntSlider(value=1, description='perplexity', min=1), FloatSlider(value=0.2, description=…
X_embedded = TSNE(n_components=2, perplexity=75, n_iter=1000, angle=0.4, metric="minkowski", metric_params={"p":1}).fit_transform(data)
plot_2d_data(X_embedded, labels, title='Результат применения TSNE', cmap='tab20')
/usr/local/lib/python3.11/dist-packages/sklearn/manifold/_t_sne.py:1164: FutureWarning: 'n_iter' was renamed to 'max_iter' in version 1.5 and will be removed in 1.7. /usr/local/lib/python3.11/dist-packages/sklearn/neighbors/_unsupervised.py:179: SyntaxWarning: Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.
**Ваш ответ здесь:** кластеры не полностью сохранились, но достаточно хорошо
Примените алгоритмы кластеризации из предыдущего пункта к новым данным. Изобразите получившиеся кластеры в векторном пространстве, полученном с помощью TSNE. Не забудьте подобрать оптимальные параметры (те же, что и в пункте 1.a.1) для всех алгоритмов. Помните, что большинство алгоритмов кластеризации также являются метрическими и существенно зависят от масштаба признаков.
**Замечание:** Обратите внимание, что применять алгоритмы кластеризации нужно к высокоразмерным векторам, а низкоразмерные вектора необходимо использовать только для визуализации.
kmeans = KMeans(n_clusters=10, random_state=0, n_init="auto").fit(data)
plot_2d_data(X_embedded, kmeans.labels_, title='Кластеризация с помощью KMeans', cmap='tab20')
def f(eps, min_samples):
clustering = DBSCAN(eps=eps, min_samples=min_samples).fit(data)
plot_2d_data(X_embedded, clustering.labels_, title='Кластеризация с помощью DBSCAN', cmap='tab20')
interactive_plot = interactive(
f,
min_samples=IntSlider(value=1, min=1, max=20, step=1, description='min_samples'),
eps=FloatSlider(value=0.01, min=0.001, max=30, step=0.001, description="eps")
)
interactive_plot
interactive(children=(FloatSlider(value=0.01, description='eps', max=30.0, min=0.001, step=0.001), IntSlider(v…
clustering = DBSCAN(eps=0.3, min_samples=5).fit(data)
plot_2d_data(X_embedded, clustering.labels_, title='Кластеризация с помощью DBSCAN', cmap='tab20')
def f(linkage):
clustering = AgglomerativeClustering(n_clusters=10, linkage=linkage).fit(data)
plot_2d_data(X_embedded, clustering.labels_, title='Кластеризация с помощью AgglomerativeClustering', cmap='tab20')
interactive_plot = interactive(
f,
linkage=widgets.Select(options=["ward", "complete", "average", "single"], value='ward', description='linkage', disabled=False)
)
interactive_plot
interactive(children=(Select(description='linkage', options=('ward', 'complete', 'average', 'single'), value='…
clustering = AgglomerativeClustering(n_clusters=10, linkage="ward").fit(data)
plot_2d_data(X_embedded, clustering.labels_, title='Кластеризация с помощью AgglomerativeClustering', cmap='tab20')
Опишите получившиеся результаты. Все ли алгоритмы одинаково хорошо разделяют данные? Если какой-то алгоритм не справился с задачей, то предположите почему.
**Ваш ответ здесь:** DBSCAN показывает плохие результаты
Визуальная оценка кластеризации при работе с высокоразмерными данными затруднительна, так как существенно зависит от выбранного метода снижения размерности, который может плохо работать на конкретных данных. С другой стороны, визуальная оценка — субъективна. Поэтому необходимы численные оценки качества кластеризации.
В данном разделе вам нужно будет реализовать две метрики кластеризации и проверить их на практике.
Существует два основных подхода к оценке кластеризации — внутренние и внешние метрики. Первые используют только информацию о векторах-признаках объектов и метки кластеров, полученные из алгоритма кластеризации. Внешние же, используют информацию об истинной разметке объектов.
Метрика силуэт является классическим представителем внутренних метрик кластеризации. Её суть заключается в оценке двух параметров, характеризующих выделенные кластеры — компактность и отделимость.
Положим, что — номер кластера для объекта .
— компактность кластеризации объекта определяется как среднее расстояние от него до всех объектов того же кластера:
— отделимость кластеризации объекта определяется как среднее расстояние от него до всех объектов второго по близости кластера:
Тогда силуэт объекта :
И, наконец, коэффициент силуэта для выборки определяется как среднее силуэтов объектов:
Если кластер состоит из одного объекта, то его силуэт равен нулю.
Реализуйте вычисление коэффициента силуэта для заданного разбиения. Подробная спецификация и описание входных данных к тестам указаны в описании задания.
При реализации обратите внимание на следующие пункты:
sklearn.metrics.pairwise_distances и аналогиВходные данные тестов удовлетворяют одному из следующих ограничений:
Несколько важных замечаний:
**Замечание:** Запрещается пользоваться библиотеками, импорт которых не объявлен в файле с шаблонами функций.
**Замечание:** Задания, в которых есть решения, содержащие в каком-либо виде взлом тестов, дополнительные импорты и прочие нечестные приемы, будут автоматически оценены в баллов без права пересдачи задания.
**Замечание:** Под циклами далее подразумеваются как явные Python-циклы (for, while, list comprehension, ...), так и неявное использование таких циклов внутри библиотек (np.apply_along_axis и подобные). В случае возникновения ошибки Time limit проверьте код на соответствие числа используемых циклов с требованиями к реализации.
**Замечание:** Для самопроверки доступны как публичные тесты (смотрите описание задания), так и тесты внутри Jupyter Notebook
def silhouette_score(x, labels):
unique, cnts = np.unique(labels, return_counts=True)
if len(unique) == 1:
return 0.0
sorted_idx = np.argsort(labels)
sorted_x = x[sorted_idx]
sorted_labels = labels[sorted_idx]
dists = sklearn.metrics.pairwise.pairwise_distances(sorted_x)
np.fill_diagonal(dists, 0)
cluster_sums = np.zeros((len(x), len(unique)))
ptr = 0
for i, (_, size) in enumerate(zip(unique, cnts)):
cluster_sums[:, i] = dists[:, ptr:ptr+size].sum(1)
ptr += size
mask = (sorted_labels[:, None] == unique).astype(int)
idx = np.argmax(mask, axis=1)
sizes = cnts[idx]
si_val = np.zeros(len(x))
valid = sizes > 1
si_val[valid] = cluster_sums[valid, idx[valid]] / (sizes[valid] - 1)
means = cluster_sums / cnts
means[np.arange(len(x)), idx] = np.inf
di_val = np.min(means, axis=1)
di_val[sizes == 1] = 0
denominator = np.maximum(si_val, di_val)
result = np.divide(di_val - si_val, denominator, where=denominator!=0, out=np.zeros_like(si_val))
return np.nanmean(result)
Посчитайте аналитически коэффициенты силуэта для объектов из примера ниже. Посчитайте силуэт аналитически и сравните его с выводом Вашей функции silhouette_score.
**Замечание:** Приведите подробные выкладки с использованием (включая значения ). Используйте те же обозначения, что и в теоретической справке выше. Итоговый ответ для силуэта запишите с точностью три знака после запятой.
fig, ax = plt.subplots(1, 1, figsize=(10, 5))
ax.scatter([0, 2], [0, 2], s=100, c='r', label='Первый класс')
ax.scatter([0, 1], [1, 0], s=100, c='b', label='Второй класс')
ax.annotate('1', (0.1, 0.1))
ax.annotate('2', (0.1, 1.1))
ax.annotate('3', (1.1, 0.1))
ax.annotate('4', (1.9, 1.9))
ax.set_title('Выборка к заданию')
ax.grid(True)
ax.legend()
fig.tight_layout()
plt.show()
x = np.array([[0, 0], [2, 2], [0, 1], [1, 0]])
labels = np.array([1, 1, 2, 2])
silhouette_score(x, labels)
np.float64(-0.15098532303997897)
**Ваш ответ здесь:** -0.15098532303997897
assert np.allclose(
silhouette_score(
np.array([[0, 0.], [0, 1], [1, 0], [2, 2]]), np.array([1, 0, 0, 1])
),
np.mean([-0.64644661, 0.12596795, 0.12596795, -0.20943058])
)
assert np.allclose(
silhouette_score(
np.array([[0, 0.], [0, 1], [1, 0], [2, 2], [1, 1], [2, 0]]), np.array([1, 0, 0, 1, 2, 2])
),
np.mean([-0.64644661, 0.12596795, -0.29289322, -0.39644661, -0.29289322, 0.12596795])
)
Пусть существует разметка , не участвующая в обучении. Мы не использовали эту разметку в качестве дополнительного признака, так как нам не хочется мотивировать модель данным признаком. Тогда предлагается ввести оценку качества алгоритма кластеризации при помощи внешней разметки, саму же разметку тогда называют gold standard.
Один из вариантов учесть gold standard разметку — внешняя метрика B-Cubed. Данная метрика позволяет определять следующие особенности кластеризации:
Пусть — gold standard, — номер кластера, выдаваемый рассматриваемым алгоритмом.
Рассмотрим несколько величин:
Тогда,
Реализуйте вычисление метрики B-Cubed. Подробная спецификация и описание входных данных к тестам указаны в описании задания.
При реализации обратите внимание на следующие пункты:
where у функций-агрегаторов в numpy ().Входные данные тестов удовлетворяют одному из следующих ограничений:
Несколько важных замечаний:
**Замечание:** Запрещается пользоваться библиотеками, импорт которых не объявлен в файле с шаблонами функций.
**Замечание:** Задания, в которых есть решения, содержащие в каком-либо виде взлом тестов, дополнительные импорты и прочие нечестные приемы, будут автоматически оценены в баллов без права пересдачи задания.
**Замечание:** Под циклами далее подразумеваются как явные Python-циклы (for, while, list comprehension, ...), так и неявное использование таких циклов внутри библиотек (np.apply_along_axis и подобные). В случае возникновения ошибки Time limit проверьте код на соответствие числа используемых циклов с требованиями к реализации.
**Замечание:** Для самопроверки доступны как публичные тесты (смотрите описание задания), так и тесты внутри Jupyter Notebook
def bcubed_score(true, pred):
pred_eq = pred[:, None] == pred
true_eq = true[:, None] == true
correct = pred_eq & true_eq
c_sizes = pred_eq.sum(1)
p = np.divide((correct & pred_eq).sum(1), c_sizes, where=c_sizes>0, out=np.zeros_like(c_sizes, dtype=float))
p_avg = np.nanmean(p)
t_sizes = true_eq.sum(1)
r = np.divide((correct & true_eq).sum(1), t_sizes, where=t_sizes>0, out=np.zeros_like(t_sizes, dtype=float))
r_avg = np.nanmean(r)
total = p_avg + r_avg
return 0.0 if total == 0 else 2 * (p_avg * r_avg) / total
assert np.allclose(bcubed_score(np.array([1]), np.array([1])), 1.0)
assert np.allclose(bcubed_score(np.array([1]), np.array([2])), 1.0)
assert np.allclose(bcubed_score(np.array([1, 2]), np.array([1, 1])), 2. / 3)
assert np.allclose(bcubed_score(np.array([1, 2]), np.array([1, 2])), 1.0)
assert np.allclose(bcubed_score(np.array([1, 2]), np.array([43, 12])), 1.0)
assert np.allclose(bcubed_score(np.array([1, 1, 2, 2]), np.array([1, 1, 1, 2])), 12. / 17)
assert np.allclose(bcubed_score(np.array([1, 2, 3, 4, 5]), np.array([1, 1, 1, 2, 2])), 4. / 7)
n_clusters, eps, min_samples) и замерьте качество кластеризации многомерных данных с помощью коэффициента силуэта и метрики B-Cubed.plot_2d_data с параметром ax). Для DBSCAN перебирайте оба параметра одновременно и изобразите 2d-heatmap для каждой из метрик. Можете использовать вспомогательные функции для создания heatmap.# Ваш код здесь:\(º □ º l|l)/
**Ваш ответ здесь:** (o・・)ノ”(ノ<、)
Подкиньте друг другу 3+ идеи, куда сходить/чем заняться на майских :)
Или вставьте/сгенерируйте любой смешной мем на тему весны/лета
1) Встретиться с друзьями и родственниками
2) Наладить режим сна
3)Подумать о бесконечно вечном
gdown.download(id='16UgWo1Emt9ar1O4h2Xxed0ZpJZ0OG5V-', output='cifar10_deep_features.npy')